package dgm.modules.neo4j;
import com.google.inject.Inject;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.TransactionalGraph;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph;
import dgm.GraphUtilities;
import dgm.Service;
import dgm.modules.ServiceModule;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
class Neo4jService implements Service
{
final Graph graph;
@Inject
Neo4jService(Graph graph)
{
this.graph = graph;
}
@Override
public void start()
{}
@Override
public void stop()
{
graph.shutdown();
}
}
public class CommonNeo4j extends ServiceModule
{
@Override
protected void configure()
{
bindService(Neo4jService.class);
}
@Provides @Singleton
final TransactionalGraph provideGraph(@Neo4jDataDir String dataDir) throws IOException
{
// manually set the cache provider
final Map<String, String> settings = new HashMap<String, String>();
settings.put("cache_type", "soft");
final Neo4jGraph graph = new Neo4jGraph(dataDir, settings);
// quickly get vertices by ID
final String[] props = new String[] {
GraphUtilities.OWNER, GraphUtilities.SYMBOLIC_OWNER,
GraphUtilities.IDENTIFIER, GraphUtilities.SYMBOLIC_IDENTIFER,
GraphUtilities.KEY_INDEX, GraphUtilities.KEY_TYPE,
GraphUtilities.KEY_ID, GraphUtilities.KEY_VERSION };
for(String prop : props)
{
graph.createKeyIndex(prop, Vertex.class);
graph.createKeyIndex(prop, Edge.class);
}
graph.stopTransaction(TransactionalGraph.Conclusion.SUCCESS);
return graph;
}
@Provides @Singleton
final Graph provideGr(TransactionalGraph graph)
{
return graph;
}
}